/*
    自定义列  带类型
    配置项列表注释
      name //String 列名称 用于column-label
      label //String 列名称 用于column-label
      sqlName // String 列取值key  用于tableData-item 取值key
      formatType  // String 列所属序列化类型 用于取序列化值 value， 列排序 align
      default // Boolean 是否所属默认分类  用于CustomColumns全局组件 Default显示
      sort //String 所属分类  用于CustomColumns全局组件 所属分类  空值时候  在getColsByColTypes序列化时不会被计算
          // Array  所属多个分类
      sortable // String 排序key  默认进行排序   不需要传 null
      widthOffset // Number 宽度偏移量
      minWidth //Sting Number 最小宽度 = minWidth + widthOffset
      fixed //String 固定
      countryKey //String 金钱序列化  接口取值的key
      headerNotic //String 头部提示
      className //String 列class名称
      isFormat // Boolean 是否进行value序列化
      format // Function  返回特定值 详解见TableTypeColumn组件
      lineClamp // Number Boolean 文本溢出  Number同 css line-clamp属性  Boolean = line-clamp 2
      ## new APi
      show //   Boolean 定义table-column显示隐藏  默认不需要设置  配合SelectColumnsDialog实现动态更新
           //  默认show  可自定义key名  但是需要配合SelectColumnsDialog prop - updateColumnsShowKey
      disabled // 控制SelectColumnsDialog 组件 checkbox按钮 是否禁用
      disabledChecked // 控制SelectColumnsDialog 组件 禁用状态 选中状态  在 disabled为true的情况下有效

*/
import * as publicModel from '@/util/public'

// 根据类型列表获取自定义cols
export function getColsByColTypes(colTypes) {
  const colsObj = {
    Metrics: [],
    All: []
    // Performance: [],
    // Meta: [],
    // Default: []
  }
  const DefaultCols = []
  if (colTypes.length) {
    colTypes.forEach((colTypeItem) => {
      if (colTypeItem.sort) {
        if (colTypeItem.sort in colsObj === false) {
          colsObj[colTypeItem.sort] = []
        }
        colsObj[colTypeItem.sort].push(colTypeItem.name)
        if (colTypeItem.default) {
          DefaultCols.push(colTypeItem.name)
        }
        colsObj.All.push(colTypeItem.name)
      }
    })
  }
  colsObj.Default = DefaultCols
  return colsObj
}

// 根据  typeColumns配置项对应key 获取对应列
export function getTypeColumnsOfName(typeColsList, colNames, findKey = 'name') {
  if (typeColsList && colNames) {
    const colNamesType = publicModel.toClass(colNames)
    if (colNamesType === 'String') {
      const findCol = typeColsList.find((item) => {
        return item[findKey] === colNames
      })
      return findCol ? { ...findCol } : undefined
    } else if (colNamesType === 'Array') {
      const findCols = []
      typeColsList.forEach((item) => {
        if (colNames.includes(item[findKey])) {
          findCols.push({ ...item })
        }
      })
      return findCols
    } else {
      throw Error('params - colNames type must be String or Array')
    }
  }
}
